// 错误处理工具
class ErrorHandler {
  constructor() {
    this.init()
  }

  init() {
    // 全局错误处理
    window.addEventListener('error', this.handleGlobalError.bind(this))
    
    // Promise 错误处理
    window.addEventListener('unhandledrejection', this.handlePromiseError.bind(this))
    
    // 控制台错误拦截
    this.interceptConsoleError()
  }

  handleGlobalError(event) {
    const { error, filename, lineno, colno } = event
    
    // 检查是否是外部脚本错误
    if (filename && (filename.includes('content_scripts') || filename.includes('extension'))) {
      event.preventDefault()
      console.warn('已忽略外部脚本错误:', { filename, lineno, colno })
      return false
    }
    
    // 检查是否是 shadowRoot 相关错误
    if (error && error.message && error.message.includes('shadowRoot')) {
      event.preventDefault()
      console.warn('已忽略 shadowRoot 相关错误:', error.message)
      return false
    }
    
    // 其他错误正常处理
    console.error('全局错误:', { error, filename, lineno, colno })
  }

  handlePromiseError(event) {
    const { reason } = event
    
    // 检查是否是 shadowRoot 相关错误
    if (reason && reason.message && reason.message.includes('shadowRoot')) {
      event.preventDefault()
      console.warn('已忽略 shadowRoot Promise 错误:', reason.message)
      return false
    }
    
    // 其他 Promise 错误正常处理
    console.error('未处理的 Promise 错误:', reason)
  }

  interceptConsoleError() {
    const originalError = console.error
    console.error = (...args) => {
      // 检查是否是 shadowRoot 相关错误
      const errorMessage = args.join(' ')
      if (errorMessage.includes('shadowRoot')) {
        console.warn('已忽略 shadowRoot 控制台错误:', errorMessage)
        return
      }
      
      // 其他错误正常输出
      originalError.apply(console, args)
    }
  }

  // Vue 错误处理
  handleVueError(err, vm, info) {
    if (err.message && err.message.includes('shadowRoot')) {
      console.warn('已忽略 Vue shadowRoot 错误:', err.message)
      return
    }
    
    console.error('Vue 错误:', { err, info })
  }

  // 组件错误处理
  handleComponentError(err, vm, info) {
    if (err.message && err.message.includes('shadowRoot')) {
      console.warn('已忽略组件 shadowRoot 错误:', err.message)
      return false // 阻止错误传播
    }
    
    console.error('组件错误:', { err, info })
    return true // 允许错误传播
  }
}

// 创建全局错误处理器实例
const errorHandler = new ErrorHandler()

export default errorHandler 